home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
PROGRAMM
/
PASCAL
/
1463.ZIP
/
DRAW-2D.ARC
/
GRINIT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-06-13
|
5KB
|
183 lines
FUNCTION LIMIT(VT:REAL):REAL;
BEGIN
IF VT > 1000.0 THEN VT := 1000.0;
IF VT < -1000.0 THEN VT := -1000.0;
LIMIT := VT;
END;
PROCEDURE GRINIT(XL,XH,YL,YH:INTEGER);
BEGIN
XPMIN := XL;
XPMAX := XH;
XPIX := XPMAX - XPMIN + 1;
YPMIN := YL;
YPMAX := YH;
YPIX := YPMAX - YPMIN + 1;
XPREV := XPMIN;
YPREV := YPMAX;
END;
PROCEDURE GRNDC(X1,Y1,X2,Y2:REAL);
BEGIN
XDMIN := X1;
XDMAX := X2;
YDMIN := Y1;
YDMAX := Y2;
END;
PROCEDURE GRVIEW(X1,Y1,X2,Y2:REAL);
BEGIN
XVMIN := X1;
XVMAX := X2;
YVMIN := Y1;
YVMAX := Y2;
END;
PROCEDURE GRWORLD(X1,Y1,X2,Y2:REAL);
BEGIN
XWMIN := X1;
XWMAX := X2;
YWMIN := Y1;
YWMAX := Y2;
X := XWMIN;
Y := YWMIN;
(* ASSUMES WORLD UNITS IN FEET *)
SCALX := (XWMAX-XWMIN)/((2.0*XPIX)/(HARDXPIX*3.0));
SCALY := (YWMAX-YWMIN)/(YPIX/(HARDYPIX*2.0));
END;
PROCEDURE GRMOVE(X1,Y1:REAL; C:INTEGER);
VAR
XINT,YINT:INTEGER;
TX,TY,XRAT,YRAT:REAL;
BEGIN
XRAT := (X1-XWMIN)/(XWMAX-XWMIN);
YRAT := 1.0-(Y1-YWMIN)/(YWMAX-YWMIN);
IF ABS(X1-XWMIN) < 0.00001 THEN XINT := XPMIN
ELSE
BEGIN
TX := XRAT*XPIX + XPMIN - 1;
TX := LIMIT(TX);
XINT := ROUND(TX);
END;
IF ABS(Y1-YWMAX) < 0.00001 THEN YINT := YPMIN
ELSE
BEGIN
TY := YRAT*YPIX + YPMIN - 1;
TY := LIMIT(TY);
YINT := ROUND(TY);
END;
XPREV := XINT;
YPREV := YINT;
PLOT(XINT,YINT,C);
END;
PROCEDURE GRDRAW(X1,Y1:REAL; C:INTEGER);
VAR
XINT,YINT:INTEGER;
TX,TY,XRAT,YRAT:REAL;
BEGIN
XRAT := (X1-XWMIN)/(XWMAX-XWMIN);
YRAT := 1.0-(Y1-YWMIN)/(YWMAX-YWMIN);
IF ABS(X1-XWMIN) < 0.00001 THEN XINT := XPMIN
ELSE
BEGIN
TX := XRAT*XPIX + XPMIN - 1;
TX := LIMIT(TX);
XINT := ROUND(TX);
END;
IF ABS(Y1-YWMAX) < 0.00001 THEN YINT := YPMIN
ELSE
BEGIN
TY := YRAT*YPIX + YPMIN - 1;
TY := LIMIT(TY);
YINT := ROUND(TY);
END;
DRAW(XPREV,YPREV,XINT,YINT,C);
XPREV := XINT;
YPREV := YINT;
END;
PROCEDURE GRBOX(XR2,YR2,XR3,YR3:REAL; C:INTEGER);
VAR
XI2,XI3,XI4,YI2,YI3,YI4:INTEGER;
TX,TY,XRAT,YRAT:REAL;
BEGIN
XRAT := (XR2-XWMIN)/(XWMAX-XWMIN);
YRAT := 1.0-(YR2-YWMIN)/(YWMAX-YWMIN);
IF ABS(XR2-XWMIN) < 0.00001 THEN XI2 := XPMIN
ELSE
BEGIN
TX := XRAT*XPIX + XPMIN - 1;
TX := LIMIT(TX);
XI2 := ROUND(TX);
END;
IF ABS(YR2-YWMAX) < 0.00001 THEN YI2 := YPMIN
ELSE
BEGIN
TY := YRAT*YPIX + YPMIN - 1;
TY := LIMIT(TY);
YI2 := ROUND(TY);
END;
XRAT := (XR3-XWMIN)/(XWMAX-XWMIN);
YRAT := 1.0-(YR3-YWMIN)/(YWMAX-YWMIN);
IF ABS(XR3-XWMIN) < 0.00001 THEN XI3 := XPMIN
ELSE
BEGIN
TX := XRAT*XPIX + XPMIN - 1;
TX := LIMIT(TX);
XI3 := ROUND(TX);
END;
IF ABS(YR3-YWMAX) < 0.00001 THEN YI3 := YPMIN
ELSE
BEGIN
TY := YRAT*YPIX + YPMIN - 1;
TY := LIMIT(TY);
YI3 := ROUND(TY);
END;
XI4 := XI3 - (XI2-XPREV);
YI4 := YI3 - (YI2-YPREV);
DRAW(XPREV,YPREV,XI2,YI2,C);
DRAW(XI2,YI2,XI3,YI3,C);
DRAW(XI3,YI3,XI4,YI4,C);
DRAW(XI4,YI4,XPREV,YPREV,C);
XPREV := XI4;
YPREV := YI4;
END;
PROCEDURE POINT(XI,YI,C:INTEGER);
BEGIN
DRAW(XI-4,YI,XI+4,YI,C);
DRAW(XI,YI-2,XI,YI+2,C);
XPREV := XI;
YPREV := YI;
END;
PROCEDURE MARK(XI,YI,C:INTEGER);
BEGIN
DRAW(XI-4,YI-2,XI+4,YI+2,C);
DRAW(XI-4,YI+2,XI+4,YI-2,C);
XPREV := XI;
YPREV := YI;
END;
PROCEDURE LINE(XI,YI,C:INTEGER);
BEGIN
DRAW(XPREV,YPREV,XI,YI,C);
XPREV := XI;
YPREV := YI;
END;
PROCEDURE BOX(XI,YI,C:INTEGER);
BEGIN
DRAW(XPREV,YPREV,XPREV,YI,C);
DRAW(XPREV,YI,XI,YI,C);
DRAW(XI,YI,XI,YPREV,C);
DRAW(XI,YPREV,XPREV,YPREV,C);
XPREV := XI;
YPREV := YI;
END;
PROCEDURE GRCIRCLE(XC,YC,RADIUS:REAL; C:INTEGER);
VAR
K:INTEGER;
X2,Y2:REAL;
BEGIN
GRMOVE(XC,YC,0);
POINT(XPREV,YPREV,C);
GRMOVE(XC+RADIUS,YC,0);
FOR K := 1 TO NPOLY DO
BEGIN
X2 := XC + RADIUS * COS(K*2*PI/NPOLY) ;
Y2 := YC + RADIUS * SIN(K*2*PI/NPOLY) ;
GRDRAW(X2,Y2,C);
END;
END;